home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (DO) / Softdisk Magazette Volume 1, No. 06 (1982-02)(Softdisk)(Side B).zip / Softdisk Magazette Volume 1, No. 06 (1982-02)(Softdisk)(Side B).do / MUSICIAN.bas < prev    next >
BASIC Source File  |  1996-12-24  |  7KB  |  178 lines

  1. 10  REM  MUSICIAN
  2. 20  REM  BY DANIEL TOBIAS  1/82
  3. 30  ONERR  GOTO 200
  4. 50  TEXT : HOME 
  5. 60  DIM LV%(9): FOR A = 1 TO 9: READ LV%(A): NEXT A
  6. 70  DATA  12,25,37,50,75,100,150,200,250
  7. 80 D$ =  CHR$(4)
  8. 99  REM   LINES 100 AND 110 POKE THE TONE MAKER INTO MEMORY<CTRL-J><CTRL-J>
  9. 100  POKE 770,173: POKE 771,48: POKE 772,192: POKE 773,136: POKE 774,208: POKE 775,4: POKE 776,198: POKE 777,7: POKE 778,240
  10. 110  POKE 779,8: POKE 780,202: POKE 781,208: POKE 782,246: POKE 783,166: POKE 784,6: POKE 785,76: POKE 786,2: POKE 787,3: POKE 788,96
  11. 120  PRINT : PRINT "<CTRL-D>NOMONC,I,O"
  12. 130 OP$ = "<CTRL-D>OPEN ":WR$ = "<CTRL-D>WRITE ":CL$ = "<CTRL-D>CLOSE "
  13. 140 RE$ = "<CTRL-D>READ "
  14. 150 R = 770:T = 6:L = 7
  15. 160  DIM T%(500),L%(500)
  16. 170  DIM N$(500)
  17. 180  DIM NO%(100):A = 1
  18. 190  READ NO%(A): IF NO%(A) < > -999  THEN A = A +1: GOTO 190
  19. 195 NN = A -1
  20. 200  REM  START
  21. 210  HOME : PRINT "****************************************": PRINT "MUSICIAN - BY DANIEL TOBIAS - JAN. 1982": PRINT : PRINT "****************************************"
  22. 220  PRINT : PRINT "YOUR CHOICE:"
  23. 230  PRINT : PRINT "  (1) WRITE NEW SONG"
  24. 240  PRINT : PRINT "  (2) EDIT SONG"
  25. 250  PRINT : PRINT "  (3) PLAY BACK SONG"
  26. 260  PRINT : PRINT "  (4) USE KEYBOARD AS ORGAN"
  27. 265  PRINT : PRINT "  (5) SAVE TO DISK"
  28. 267  PRINT : PRINT "  (6) LOAD FROM DISK": PRINT : PRINT "  (7) QUIT"
  29. 270  PRINT : PRINT "WHICH? ";: GET I$: IF  VAL(I$) < = 0  OR  VAL(I$) >7  THEN 200
  30. 280  IF  VAL(I$) = 7  THEN  HOME : PRINT : END 
  31. 285  IF  VAL(I$) = 4  THEN  GOSUB 300: GOTO 200
  32. 286  IF  VAL(I$) = 1  THEN NL = 0:N = 1: GOSUB 700: GOTO 200
  33. 287  IF  VAL(I$) = 2  THEN  HOME : PRINT : INPUT "NOTE # TO START AT: ";N: IF N >0  THEN  GOSUB 700: GOTO 200
  34. 290  IF  VAL(I$) = 3  THEN  GOSUB 900: GOTO 200
  35. 292  IF  VAL(I$) = 5  THEN  GOSUB 4000: GOTO 200
  36. 294  IF  VAL(I$) = 6  THEN  GOSUB 5000: GOTO 200
  37. 299  GOTO 200
  38. 300  REM  PLAY MUSIC:NO PROG.
  39. 305 L% = 100
  40. 307  HOME : GOSUB 3000
  41. 308  VTAB 3: PRINT "LENGTH: ";L%
  42. 310  HTAB 1: VTAB 6: GOSUB 1000
  43. 315  IF T% =  -2  THEN  GOSUB 500
  44. 316  IF T% =  -7  THEN  GOSUB 600: VTAB 3: PRINT "LENGTH: ";L%
  45. 317  IF T% =  -8  THEN  RETURN 
  46. 320  IF T% <0  THEN 310
  47. 325  HTAB 1: VTAB 1: CALL  -868: PRINT "NOTE: "I$: VTAB 4: CALL  -868: PRINT "TONE: ";T%
  48. 330  IF T% = 0  THEN  GOSUB 400: GOTO 310
  49. 340  POKE T,T%: POKE L,L%: CALL R: GOTO 310
  50. 400  REM  REST
  51. 410  FOR A = 1 TO L%(B) *2: NEXT A
  52. 420  RETURN 
  53. 500  REM  CHANGE LENGTH
  54. 510  HTAB 1: PRINT "L";: HTAB 1: GET I$: PRINT " ";
  55. 520 I =  VAL(I$)
  56. 530  IF I = 0  THEN  RETURN 
  57. 540 L% = LV%(I)
  58. 580  VTAB 3: HTAB 1: PRINT "LENGTH: ";L%;: CALL  -868
  59. 590  RETURN 
  60. 600  REM  NONSTANDARD NOTE
  61. 610  HTAB 1: VTAB 3: CALL  -868: INPUT "LENGTH: ";A$:L% =  VAL(A$)
  62. 620  IF L% <0  OR L% >255  THEN 610
  63. 630  HTAB 1: VTAB 4: CALL  -868: INPUT "TONE: ";A$:T% =  VAL(A$)
  64. 640  IF T% <0  OR T% >255  THEN 630
  65. 645 I$ = "*"
  66. 650  RETURN 
  67. 700  REM  PROGRAM
  68. 705  HOME 
  69. 706  GOSUB 3000
  70. 707 L% = 100
  71. 709  IF N >NL  THEN N$(N) = ""
  72. 710  HTAB 1: VTAB 1: PRINT "NOTE #"N" : "N$(N);: CALL  -868
  73. 720  PRINT : IF N >NL  THEN T%(N) = 0:L%(N) = L%
  74. 725  PRINT 
  75. 730  PRINT "LENGTH: ";L%(N);: CALL  -868
  76. 740  PRINT : PRINT "TONE: ";T%(N);: CALL  -868
  77. 742  IF N = 500  THEN  RETURN 
  78. 745 L% = L%(N):T% = T%(N)
  79. 746  IF T% = 0  THEN 750
  80. 747  POKE L,L%: POKE T,T%(N): CALL R
  81. 750  VTAB 6: HTAB 1: GOSUB 1000
  82. 755  IF T% =  -2  THEN  GOSUB 500
  83. 760  IF T% =  -7  THEN  GOSUB 600
  84. 765  IF T% =  -8  THEN L%(N) = L%: RETURN 
  85. 767  IF T% =  -4  AND N >NL  THEN T% =  -1
  86. 770  IF T% =  -4  THEN L%(N) = L%: GOTO 820
  87. 775  IF T% =  -5  AND N = 1  THEN 750
  88. 780  IF T% =  -5  THEN L%(N) = L%:N = N -1: GOTO 709
  89. 782  IF T% =  -6  THEN  GOSUB 2000: GOTO 710
  90. 784  IF T% =  -3  THEN  GOSUB 2100: GOTO 709
  91. 790  IF T% <0  THEN 750
  92. 795  IF T% = 0  THEN 810
  93. 800  POKE L,L%: POKE T,T%: CALL R
  94. 810 L%(N) = L%:T%(N) = T%
  95. 815 N$(N) = I$
  96. 820 N = N +1
  97. 825  IF N >NL +1  THEN NL = N -1
  98. 830  GOTO 709
  99. 900  REM  PLAY BACK
  100. 910  HOME 
  101. 915  IF NL = 0  THEN  RETURN 
  102. 920  FOR B = 1 TO NL
  103. 930  IF T%(B) = 0  THEN  GOSUB 400
  104. 940  IF T%(B) >0  THEN  POKE T,T%(B): POKE L,L%(B): CALL R
  105. 950  NEXT B
  106. 960  RETURN 
  107. 999  END 
  108. 1000  REM  INPUT
  109. 1005 T% =  -1
  110. 1010  GET I$
  111. 1020  IF I$ > = "A"  AND I$ < = "Z"  THEN T% = NO%( ASC(I$) -64): RETURN 
  112. 1030  IF I$ = ","  THEN T% = 38: RETURN 
  113. 1040  IF I$ = "."  THEN T% = 34: RETURN 
  114. 1042  IF I$ = ";"  THEN T% = 32: RETURN 
  115. 1045  IF I$ > = "0"  AND I$ <":"  THEN T% = NO%( ASC(I$) -21): RETURN 
  116. 1050  IF I$ = " "  THEN T% = 0: RETURN 
  117. 1060  IF I$ = ":"  THEN T% =  -2
  118. 1065  IF I$ = "-"  THEN T% =  -3
  119. 1070  IF I$ =  CHR$(21)  THEN T% =  -4
  120. 1080  IF I$ =  CHR$(8)  THEN T% =  -5
  121. 1090  IF I$ = "/"  THEN T% =  -6
  122. 1094  IF I$ =  CHR$(13)  THEN T% =  -7
  123. 1096  IF I$ =  CHR$(27)  THEN T% =  -8
  124. 1099  RETURN 
  125. 2000  REM  DELETE
  126. 2010  IF N = NL  THEN NL = NL -1:T%(N) = 0:N$(N) = " ": RETURN 
  127. 2020  IF N >NL  THEN  RETURN 
  128. 2030  FOR A = N +1 TO NL
  129. 2040 T%(A -1) = T%(A):L%(A -1) = L%(A)
  130. 2045 N$(A -1) = N$(A)
  131. 2050  NEXT A:NL = NL -1
  132. 2060  RETURN 
  133. 2100  REM  INSERT
  134. 2105 L%(N) = L%
  135. 2110  IF N >NL  THEN  RETURN 
  136. 2120  FOR A = NL TO N  STEP  -1
  137. 2130 T%(A +1) = T%(A):L%(A +1) = L%(A)
  138. 2135 N$(A +1) = N$(A)
  139. 2140  NEXT A:NL = NL +1:T%(N) = 0
  140. 2145 N$(N) = " "
  141. 2150  RETURN 
  142. 3000  REM  DISPLAY
  143. 3010  HTAB 1: VTAB 8
  144. 3020  PRINT "NOTES: C # D # E   F # G # A # B   C # DKEYS : Q 2 W 3 E   R 5 T 6 Y 7 U   I 9 O"
  145. 3030  PRINT "NOTES: # E   F # G # A # B   C # D # E  KEYS : 0 P   Z S X D C F V   B H N J M  "
  146. 3040  PRINT "NOTES: F # G #": PRINT "KEYS : , L . ;"
  147. 3050  PRINT : PRINT "HIT THE : KEY TO CHANGE TONE LENGTH.    IT SHOULD BE FOLLOWED BY A NUMBER KEY."
  148. 3060  PRINT "/ DELETE    - INSERT   ESC: STOP": PRINT "HIT RETURN TO ENTER NONSTANDARD NOTE."
  149. 3070  RETURN 
  150. 4000  REM  SAVE
  151. 4010  HOME : PRINT : PRINT D$"CATALOG"
  152. 4020  PRINT : INPUT "FILE TO SAVE: ";I$
  153. 4025  IF I$ = ""  THEN  RETURN 
  154. 4030  PRINT D$"OPEN "I$: PRINT D$"WRITE"I$
  155. 4040  PRINT NL
  156. 4050  FOR A = 1 TO NL: PRINT T%(A): PRINT L%(A): NEXT A
  157. 4055  FOR A = 1 TO NL: PRINT N$(A): NEXT A
  158. 4060  PRINT D$"CLOSE": RETURN 
  159. 5000  REM  LOAD
  160. 5010  HOME : PRINT : PRINT D$"CATALOG"
  161. 5020  PRINT : INPUT "FILE TO LOAD: ";I$
  162. 5025  IF I$ = ""  THEN  RETURN 
  163. 5030  PRINT D$"OPEN"I$: PRINT D$"READ"I$
  164. 5040  INPUT NL
  165. 5050  FOR A = 1 TO NL: INPUT T%(A): INPUT L%(A): NEXT A
  166. 5055  FOR A = 1 TO NL: INPUT N$(A): NEXT A
  167. 5060  PRINT D$"CLOSE": RETURN 
  168. 10000  REM  DATA
  169. 10010  REM  NOTES
  170. 10030  DATA  -1,51,61,64,165
  171. 10040  DATA  57,-1,48,102,43
  172. 10050  DATA  -1,36,41,46,92
  173. 10060  DATA  82,202,155,74,139
  174. 10070  DATA  110,54,185,68,125
  175. 10080  DATA  78
  176. 10090  DATA  87,-1,195,175,-1
  177. 10100  DATA  149,132,117,-1,99
  178. 10990  DATA  -999